package sao.modelo;

import java.util.ArrayList;
import java.util.List;

public class Perfil {
	
	private List<Operacao> operacaoes; // Lista de operações suportadas pelo perfil
	
	
	/**
	 * Construtor parametrizado
	 * @param tipoUsuario
	 */
	public Perfil(String tipoUsuario) {
		super();
		operacaoes = new ArrayList<Operacao>();
		tipoUsuario = tipoUsuario.trim();
		if (tipoUsuario.equals("paciente")) {
			gerarOperacoesPaciente();
		}
		if (tipoUsuario.equals("atendente")) {
			gerarOperacoesAtendente();
		}
		if (tipoUsuario.equals("medico")) {
			gerarOperacoesMedico();
		}
		if (tipoUsuario.equals("admin")) {
			gerarOperacoesAdmin();
		}
	}


	/**
	 * Retorna uma List das operações válidas para o tipo de usuário
	 * @return the operacaoes
	 */
	public List<Operacao> getOperacaoes() {
		return operacaoes;
	}
	
	
	/**
	 * Verifica se a operação passada é válida para o tipo de usuário
	 * @param operacao - String que será testado se está ou não na Lista de operações válidas
	 * @return Verdadeiro caso seja uma operação válida ou falso caso contrário
	 */
	public boolean isOperacaoValida(String operacao) {
		for (Operacao op : operacaoes) {
			if (op.getIdentificador().equalsIgnoreCase(operacao)) {
				return true;
			}
		}
		return false;
	}


	/**
	 * Gerar as operações para o tipo de usuário Admin 
	 */
	private void gerarOperacoesAdmin() {
		operacaoes.add( new Operacao("cadastrarUsuario.do", "Cadastrar Usuário") );
	}


	/**
	 * Gerar as operações para o tipo de usuário Médico 
	 */
	private void gerarOperacoesMedico() {
		operacaoes.add( new Operacao("agendarConsulta.do", "Agendar Consulta") );
		operacaoes.add( new Operacao("excluirAgendamento.do", "Excluir Agendamento") );
		operacaoes.add( new Operacao("cadastrarUsuario.do", "Cadastrar Usuário") );
		operacaoes.add( new Operacao("relatorioAgendamento.do", "Relatório de Agendamentos") );
		operacaoes.add( new Operacao("editarDisponibilidade.do", "Editar Disponibilidade") );
		operacaoes.add( new Operacao("relatorios.do", "Relatórios") );
	}


	/**
	 * Gerar as operações para o tipo de usuário Atendente 
	 */
	private void gerarOperacoesAtendente() {
		gerarOperacoesMedico();
	}


	/**
	 * Gerar as operações para o tipo de usuário Paciente 
	 */
	private void gerarOperacoesPaciente() {
		operacaoes.add( new Operacao("agendarConsultaPropria.do", "Agendar Consulta") );
		operacaoes.add( new Operacao("excluirAgendamentoProprio.do", "Excluir Agendamento") );
		operacaoes.add( new Operacao("relatorioProprio.do", "Relatórios") );
	}

	
}
